package com.banmao.algorithm.No201To300.No202;

import java.util.HashSet;

/**
 *  虽然通过了，但是效率慢，时间2ms（不知道这算啥慢了）
 */
public class Solution1 {

    public boolean isHappy(int n) {

        HashSet<Long> set = new HashSet<>();

        return judgeHappy((long) n, set);

    }

    public Boolean judgeHappy(Long root, HashSet<Long> set) {

        // 递归出口是set中存在sum，或者sum为1
        Long sum = squareSum(root);
        if(sum == 1) {
            return true;
        } else if(set.contains(sum)) {
            return false;
        }

        set.add(sum);
        return judgeHappy(sum, set);

    }

    public Long squareSum(Long root) {

        // 将n转成字符串，然后按位再转成int
        // FIXME 在这个地方进行的操作拖慢了效率，参考Carl的解法
        String rootStr = String.valueOf(root);
        Long sum = 0L;
        // 按位求平方和
        for (char c : rootStr.toCharArray()) {
            Long num = Long.parseLong(String.valueOf(c));
            sum += num * num;
        }

        return sum;

    }

}
